/**
 * Интерфейс для классов, предназначенных для сериализации
 * и десериализации объектов заданного типа
 */

#ifndef _OBJECTSERIALIZER_H
#define	_OBJECTSERIALIZER_H

#include <string>
#include "ParseException.h"
#include "conf.h"

namespace etu {
namespace common {

template <typename T>
class ObjectSerializer {
public:
    ObjectSerializer() {}
    //ObjectSerializer(const ObjectSerializer& orig) {}
    virtual ~ObjectSerializer() {}

    /**
     * Сериализация объекта заданного типа в строку
     * @param obj объект, предназначенный для сериализации
     * @return заданный объект, представленный в сериализаванном виде
     */
    virtual std::string serialize(T obj) = 0;

    /**
     * Десериализация объекта из строкового вида
     * @param src объект, предназначенный для десериализации из строкового типа
     * @return объект заданного типа
     * @throws ParseException если строка не содержит неправильный формат
     * сериализации объекта
     */
    virtual T deserialize(const std::string& src) throw(ParseException) = 0;
};

}
}

#endif	/* _OBJECTSERIALIZER_H */

